package de.gof.ppstool.bestellverwaltung.db;

import java.io.Serializable;
import javax.persistence.*;
import java.util.List;

/**
 * The persistent class for the bestellung database table.
 */
@Entity
@NamedQueries({
		@NamedQuery(name = Bestellung.FINDE_ALLE_BESTELLUNGEN, query = "SELECT DISTINCT b FROM Bestellung b"),
		@NamedQuery(name = Bestellung.FINDE_BESTELLUNG_NACH_ID, query = "SELECT b FROM Bestellung b WHERE b.bestellungId = :"
				+ Bestellung.PARAM_BESTELLUNG_ID) })
@Table(name = "bestellung")
public class Bestellung implements Serializable {
	static final String FINDE_ALLE_BESTELLUNGEN = "findeAlleBestellungen";
	static final String FINDE_BESTELLUNG_NACH_ID = "findeBestellungNachId";
	static final String PARAM_BESTELLUNG_ID = "bestellungId";
	private static final long serialVersionUID = -6763176181340038602L;
	/**
	 * +++++++++++++++++++++++++++++++++++++++++
	 * +++++ Attribute der Klasse Bestellung +++
	 * +++++++++++++++++++++++++++++++++++++++++
	 */
	@Id
	@GeneratedValue(strategy = GenerationType.AUTO, generator = "bestellung_sequence_name")
	@SequenceGenerator(name = "bestellung_sequence_name", sequenceName = "bestellung_bestellung_id_seq", allocationSize = 1)
	@Column(name = "bestellung_id", unique = true, nullable = false)
	private Long bestellungId;
	@Column(length = 2147483647)
	private String bestelltag;
	@OneToMany(mappedBy = "bestellung")
	private List<BestellpositionEntity> bestellpositionen;
	@Column(length = 2147483647)
	private String bemerkung;

	/**
	 * +++++++++++++++++++++++++++++++++++++++++++++
	 * +++++ Konstruktoren der Klasse Bestellung +++
	 * +++++++++++++++++++++++++++++++++++++++++++++
	 */
	public Bestellung() {
		super();
	}

	public Bestellung(Long bestellungId, String bestelltag,
			List<BestellpositionEntity> bestellpositionen, String bemerkung) {
		super();
		this.bestellungId = bestellungId;
		this.bestelltag = bestelltag;
		this.bestellpositionen = bestellpositionen;
		this.bemerkung = bemerkung;
	}

	public Bestellung(Long bestellungId, String bestelltag,
			List<BestellpositionEntity> bestellpositionen) {
		super();
		this.bestellungId = bestellungId;
		this.bestelltag = bestelltag;
		this.bestellpositionen = bestellpositionen;
	}

	/**
	 * +++++++++++++++++++++++++++++	
	 * +++++ Getter und Setter +++++
	 * +++++++++++++++++++++++++++++
	 */
	public Long getBestellungId() {
		return this.bestellungId;
	}

	public void setBestellungId(Long bestellungId) {
		this.bestellungId = bestellungId;
	}

	public String getBestelltag() {
		return this.bestelltag;
	}

	public void setBestelltag(String bestelltag) {
		this.bestelltag = bestelltag;
	}

	public String getBemerkung() {
		return bemerkung;
	}

	public void setBemerkung(String bemerkung) {
		this.bemerkung = bemerkung;
	}

	public List<BestellpositionEntity> getBestellpositionen() {
		return this.bestellpositionen;
	}

	public void setBestellpositionen(
			List<BestellpositionEntity> bestellpositionen) {
		this.bestellpositionen = bestellpositionen;
	}

	@Override
	public int hashCode() {
		final int prime = 31;
		int result = 1;
		result = prime * result
				+ ((bemerkung == null) ? 0 : bemerkung.hashCode());
		result = prime * result
				+ ((bestelltag == null) ? 0 : bestelltag.hashCode());
		result = prime * result
				+ ((bestellungId == null) ? 0 : bestellungId.hashCode());
		return result;
	}

	@Override
	public boolean equals(Object obj) {
		if (this == obj)
			return true;

		if (obj == null)
			return false;

		if (getClass() != obj.getClass())
			return false;

		Bestellung other = (Bestellung) obj;
		if (bemerkung == null) {
			if (other.bemerkung != null)
				return false;

		} else if (!bemerkung.equals(other.bemerkung))
			return false;

		if (bestelltag == null) {
			if (other.bestelltag != null)
				return false;

		} else if (!bestelltag.equals(other.bestelltag))
			return false;

		if (bestellungId == null) {
			if (other.bestellungId != null)
				return false;

		} else if (!bestellungId.equals(other.bestellungId))
			return false;

		return true;
	}

	@Override
	public String toString() {
		return "Bestellung [bestellungId=" + bestellungId + ", bemerkung="
				+ bemerkung + ", bestelltag=" + bestelltag + "]";
	}

}
